﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;

using BUS;
using DTO;

namespace Control
{
    public partial class ctrlTiepNhanNhanVien : DevExpress.XtraEditors.XtraUserControl
    {
        public ctrlTiepNhanNhanVien()
        {
            InitializeComponent();

            //Dùng memoedit thay cho text để dùng multiline
            //Dùng lookupedit thay cho comboboxedit để có thể gán datasource

            //setting ngày tháng
            this.dateNgaySinh.Properties.DisplayFormat.FormatString = "dd/MM/yyyy";
            this.dateNgaySinh.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime;
            this.dateNgaySinh.Properties.EditFormat.FormatString = "dd/MM/yyyy";
            this.dateNgaySinh.Properties.EditFormat.FormatType = DevExpress.Utils.FormatType.DateTime;
            this.dateNgaySinh.Properties.Mask.EditMask = "dd/MM/yyyy";

            //lấy dữ liệu để kiểm tra mật khẩu
            doDaiMatKhauToiThieu = (int)ThamSoBUS.DoDaiMatKhauToiThieu().GiaTri;
            doDaiMatKhauToiDa = (int)ThamSoBUS.DoDaiMatKhauToiDa().GiaTri;
        }

        #region "Biến cục bộ"
        bool matKhauHopLe = false;
        bool tenTaiKhoanHopLe = false;
        int doDaiMatKhauToiThieu = 0;
        int doDaiMatKhauToiDa = 0;
        #endregion

        private void ctrlTiepNhanNhanVien_Load(object sender, EventArgs e)
        {
            //set dateNgaySinh = today
            dateNgaySinh.DateTime = DateTime.Today;

            //Load bằng cấp
            lookUpBangCap.Properties.DataSource = BangCapBUS.DocDanhSach();
            lookUpBangCap.Properties.DisplayMember = "TenBangCap";
            lookUpBangCap.Properties.ValueMember = "MaBangCap";
            lookUpBangCap.ItemIndex = 0;

            //Load chức vụ
            lookUpChucVu.Properties.DataSource = ChucVuBUS.DocDanhSach();
            lookUpChucVu.Properties.DisplayMember = "TenChucVu";
            lookUpChucVu.Properties.ValueMember = "MaChucVu";
            lookUpChucVu.ItemIndex = 0;

            //Load bộ phận
            lookUpBoPhan.Properties.DataSource = BoPhanBUS.DocDanhSach();
            lookUpBoPhan.Properties.DisplayMember = "TenBoPhan";
            lookUpBoPhan.Properties.ValueMember = "MaBoPhan";
            lookUpBoPhan.ItemIndex = 0;
        }

        //không cho gõ chữ trong textbox số điện thoại
        private void txtDienThoai_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
                e.Handled = true;
            //!Char.IsControl(e.KeyChar) cho phép gõ các ký tự điều khiển (các phím mũi tên,Delete,Insert,backspace,space bar)
            //dùng Regex
            //if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), "\\d+"))
            //    e.Handled = true; 
        }

        //kiểm tra tên tài khoản đã sử dụng chưa
        private void txtTenTaiKhoan_EditValueChanged(object sender, EventArgs e)
        {
            //true : đã tồn tại
            //false : chưa tồn tại
            if (NhanVienBUS.KiemTraTaiKhoan(txtTenTaiKhoan.Text.Trim()) == true)
            {
                //không hợp lệ
                tenTaiKhoanHopLe = false;
                dxErrorProvider1.SetError(txtTenTaiKhoan, "Tên tài khoản đã tồn tại");
            }
            else
            {
                //hợp lệ                
                tenTaiKhoanHopLe = true;
                dxErrorProvider1.SetError(txtTenTaiKhoan, "");
            }
        }

        //kiểm tra độ dài mật khẩu hợp lệ
        private void txtMatKhau_EditValueChanged(object sender, EventArgs e)
        {
            int mk = txtMatKhau.Text.Trim().Length;
            if (mk < doDaiMatKhauToiThieu || mk > doDaiMatKhauToiDa)
            {
                //chưa hợp lệ
                matKhauHopLe = false;
                dxErrorProvider1.SetError(txtMatKhau, "Độ dài mật khẩu phải > " + doDaiMatKhauToiThieu + " và < " + doDaiMatKhauToiDa);
            }
            else
            {
                //hợp lệ
                matKhauHopLe = true;
                dxErrorProvider1.SetError(txtMatKhau, "");
            }
        }

        private void btnDongY_Click(object sender, EventArgs e)
        {
            if (KiemTra() == false)
                return;
            try
            {
                //Lấy thông tin bằng cấp
                BangCapDTO dtoBangCap = (BangCapDTO)lookUpBangCap.GetSelectedDataRow();

                //Lấy thông tin bộ phận
                BoPhanDTO dtoBoPhan = (BoPhanDTO)lookUpBoPhan.GetSelectedDataRow();

                //Lấy thông tin chức vụ
                ChucVuDTO dtoChucVu = (ChucVuDTO)lookUpChucVu.GetSelectedDataRow();

                //tạo dto nhân viên
                NhanVienDTO dto = new NhanVienDTO
                {
                    DiaChi = memoDiaChi.Text.Trim(),
                    DienThoai = txtDienThoai.Text.Trim(),
                    MaBangCap = dtoBangCap.MaBangCap,
                    MaBoPhan = dtoBoPhan.MaBoPhan,
                    MaChucVu = dtoChucVu.MaChucVu,
                    MatKhau = txtMatKhau.Text.Trim(),
                    NgaySinh = dateNgaySinh.DateTime,
                    TenNhanVien = txtHoTen.Text.Trim(),
                    TenTaiKhoan = txtTenTaiKhoan.Text.Trim(),
                };

                //thực hiện thêm
                NhanVienBUS.Them(dto);

                //refresh lại dữ liệu
                LamMoi();

                //show thông báo
                MessageBox.Show("Thêm thành công!!!");
            }
            catch (Exception ex)
            {
                //show lỗi
                MessageBox.Show(ex.Message, "Lỗi!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private bool KiemTra()
        {
            if (txtHoTen.Text.Trim() == "")
            {
                MessageBox.Show("Họ tên không được để trống", "Lỗi!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }

            if (memoDiaChi.Text.Trim() == "")
            {
                MessageBox.Show("Địa chỉ không được để trống", "Lỗi!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }

            if (txtDienThoai.Text.Trim() == "")
            {
                MessageBox.Show("Số điện thoại không được để trống", "Lỗi!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }

            if (txtTenTaiKhoan.Text.Trim() == "")
            {
                MessageBox.Show("Tên tài khoản không được để trống", "Lỗi!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }

            if (tenTaiKhoanHopLe == false)
            {
                MessageBox.Show("Tên tài khoản đã tồn tại", "Lỗi!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }

            if (matKhauHopLe == false)
            {
                MessageBox.Show("Mật khẩu không hợp lệ", "Lỗi!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }

            return true;
        }

        private void LamMoi()
        {
            //set lại giá trị cho ngày sinh
            dateNgaySinh.DateTime = DateTime.Today;

            //trống các textbox
            txtHoTen.Text = "";
            memoDiaChi.Text = "";
            txtDienThoai.Text = "";
            txtTenTaiKhoan.Text = "";
            txtMatKhau.Text = "";

            //set lại index
            lookUpBangCap.ItemIndex = 0;
            lookUpBoPhan.ItemIndex = 0;
            lookUpChucVu.ItemIndex = 0;
        }

        //private void txtDienThoai_TextChanged(object sender, EventArgs e)
        //{
        //    //không cho phép paste không chứa số
        //    if (txtDienThoai.Text != "")
        //    {
        //        string soDienThoai = "";
        //        for (int i = 0; i < txtDienThoai.Text.Length; i++)
        //        {
        //            if (char.IsDigit(txtDienThoai.Text[i]))
        //            {
        //                soDienThoai = soDienThoai += txtDienThoai.Text[i];
        //            }
        //        }
        //        txtDienThoai.Text = soDienThoai;
        //    }
        //}
    }
}
